#!usr/bin/env python  
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: boats.py 
@version:
@time: 2023/12/31 
"""


def boats(people, weight):
    people.sort()
    left = 0
    right = len(people) - 1
    res = 0
    while left <= right:
        res += 1
        if (people[left] + people[right]) <= weight:
            left += 1
        right -= 1
    return res


if __name__ == '__main__':
    """
    先将体重的数组从小到大排序

    在一个while循环中不断判断左右指针指向的两个人是否能被安排在同一艘救生艇内，并进行所需救生艇数量的累加。
    
    在循环之初，先对res做一个自增，无论两人能否被容纳进同一艘救生艇，都一定是至少需要一艘的；
    
    接着判断如果两人可以容纳进一艘救生艇，那么左指针右移动，否则左指针不移动。
    
    然而无论一艘救生艇能否容纳得下两人，右指针都是需要左移的，因为如果一艘救生艇容纳不下两人，
    一定是需要体重较大的那一位独占一艘救生艇的，所以右指针左移即可。
    """
    people = [3, 2, 2, 1]
    weight = 3
    print(boats(people, weight))
